iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~

在本系列文會延續 Re: 從零改用 .NET MAUI 技術來繼續過去用 Xamarin 技術開發的一個 App : TopStore 使用 .NET MAUI 技術所建立的 TopStore App ,更新 .NET MAUI 在 .NET 6 轉換到 .NET 7 時所需要調整的部分,並持續地的開發 TopStore App 其他需要的功能。

本篇是 Re: 從零續用 .NET MAUI 技術開發過去的一個 App : TopStore 系列 系列文的 EP27。


由於先前在撰寫 "訂單列表" 的相關瀏覽時,只注重可以快速看到訂單的資訊,在先前的相關 EP 介紹時,很快速的把這個功能完成了。

但既然現在可以開始增加訂單的資料時,相對的也要能進行編輯與刪除等功能了~~~

首先,就先來處理編輯一筆訂單當中的某項商品販售價格、販售數量、備註的資訊,也就是要編輯其中的一筆 OrderDetail 的紀錄內容!

01-Android

要處理 OrderDetail 的資料紀錄,當然就要調整 MockData、DataService 與 IDataService 的設計。

首先,在 IDataService 增加一個 GetOrderDetail 方法、一個 SaveOrderDetail 方法的宣告,並透過實作介面的處理幫 MockData 與 DataService 都實作好 GetOrderDetail、SaveOrderDetail 方法。

在 IDataService:

Models.OrderDetail GetOrderDetail(int orderDetailId);
int SaveOrderDetail(Models.OrderDetail orderDetail);

完成結果如下圖:
02

在 DataService:

public OrderDetail GetOrderDetail(int orderDetailId)
{
    throw new NotImplementedException();
}

public int SaveOrderDetail(OrderDetail orderDetail)
{
    throw new NotImplementedException();
}

完成結果如下圖:
03

在 MockData:

public OrderDetail GetOrderDetail(int orderDetailId)
{
    return orderDetails.FirstOrDefault((orderDetail) => orderDetail.Id == orderDetailId);
}

public int SaveOrderDetail(OrderDetail orderDetail)
{
    return 1;
}

由於 MockData 在 GetOrderDetail 回傳的是 OrderDetail 的物件,所以從 View 編輯時就會直接變更 orderDetails 所記錄的物件資料,其實有沒有 SaveOrderDetail 並沒有顯著的差異,但若之後在使用 DataService 的時候仍是要仰賴呼叫 SaveOrderDetail 處理 SQLite DB 的內容,所以仍是在 MockData 中把 SaveOrderDetail 實作出來。

完成結果如下圖:
04

繼續要調整的是 OrderDetailShowPage 與 OrderDetailShowPageViewModel。

首先,針對 OrderDetailShowPageViewModel 增加一個 ObservableProperty 的 _isEdit 屬性,以便 OrderDetailShowPage 可以判定是否處於編輯模式。

[ObservableProperty]
private bool _isEdit;

接著,再針對 OrderDetailShowPageViewModel 增加一個 RelayCommand 的 Save 方法,以便 OrderDetailShowPage 可以切換是否進入編輯。

[RelayCommand]
private async void Save()
{
    if (IsEdit)
    {
        var orderDetail = App.DataService.GetOrderDetail(OrderDetailShow.OrderDetailId);
        if (orderDetail != null)
        {
            orderDetail.Quantity = OrderDetailShow.Quantity;
            orderDetail.Price = OrderDetailShow.Price;
            orderDetail.Note = OrderDetailShow.Note;
            App.DataService.SaveOrderDetail(orderDetail);
        }

        var isBack = await Shell.Current.DisplayAlert("通知", "儲存成功!",
                                                            "返回訂單明細列表", "再檢視此筆資料");
        if (isBack)
        {
            await Shell.Current.GoToAsync("..");
        }
    }
    IsEdit = !IsEdit;
}

完成結果如下圖:
05

OrderDetailShowPage 這邊也要調整一些 XAML 的編輯,增加一個 ToolbarItem 做切換 IsEdit 模式;Entry 的 IsEnabled 繫結到 IsEdit 屬性。

<ContentPage.ToolbarItems>
    <ToolbarItem Command="{Binding SaveCommand}" 
                    Text="{Binding IsEdit, Converter={StaticResource DetailPageToolBarItemDisplayText}, ConverterParameter='儲存,編輯'}" />
</ContentPage.ToolbarItems>
IsEnabled="False" => IsEnabled="{Binding IsEdit}"

完成結果如下圖:
06

以上變更完成後,執行的結果如下圖展示:
07-Android


上一篇
EP26
下一篇
EP28
系列文
Re: 從零續用 .NET MAUI 技術開發過去的一個 App : TopStore 系列30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言